package co.edu.univalle.vista;

import co.edu.univalle.logica.ClienteLogicaLocal;
import co.edu.univalle.logica.InmuebleLogicaLocal;
import co.edu.univalle.logica.TipoInmuebleLogicaLocal;
import co.edu.univalle.modelo.Clientes;
import co.edu.univalle.modelo.Inmueble;
import co.edu.univalle.modelo.TipoInmueble;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.component.selectbooleancheckbox.SelectBooleanCheckbox;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author Jhony
 */

@ManagedBean(name = "inmuebleVista")
@RequestScoped
public class InmuebleVista {
    @EJB
    private InmuebleLogicaLocal inmuebleLogica;
    @EJB
    private TipoInmuebleLogicaLocal tipoInmuebleLogica;
    @EJB
    private ClienteLogicaLocal clienteLogica;
        
    private InputText txtCodigo;
    private InputText txtBarrio;
    private InputText txtDireccion;
    private InputText txtTipo;
    private InputText txtCliente;
    private InputTextarea areaDescripcion;
    private SelectOneMenu cmdTipoInmueble;
    private SelectBooleanCheckbox disponibilidad;
        
    private CommandButton btnRegistrar;
    private CommandButton btnModificar;
    private CommandButton btnEliminar;
    private CommandButton btnLimpiar;
    
    private List<Inmueble> listaInmuebles;
    private List<Clientes> listaClientes;
    private ArrayList<SelectItem> tipoInmueble = null;
    private Inmueble selectInmueble;
    private Clientes selectCliente;

    public Clientes getSelectCliente() {
        return selectCliente;
    }

    public void setSelectCliente(Clientes selectCliente) {
        this.selectCliente = selectCliente;
    }

    public ClienteLogicaLocal getClienteLogica() {
        return clienteLogica;
    }

    public void setClienteLogica(ClienteLogicaLocal clienteLogica) {
        this.clienteLogica = clienteLogica;
    }

    public InputTextarea getAreaDescripcion() {
        return areaDescripcion;
    }

    public void setAreaDescripcion(InputTextarea areaDescripcion) {
        this.areaDescripcion = areaDescripcion;
    }
    
       
    public InputText getTxtTipo() {
        return txtTipo;
    }

    public void setTxtTipo(InputText txtTipo) {
        this.txtTipo = txtTipo;
    }
    
    public InmuebleLogicaLocal getInmuebleLogica() {
        return inmuebleLogica;
    }

    public void setInmuebleLogica(InmuebleLogicaLocal inmuebleLogica) {
        this.inmuebleLogica = inmuebleLogica;
    }
 
    public InputText getTxtCodigo() {
        return txtCodigo;
    }

    public void setTxtCodigo(InputText txtCodigo) {
        this.txtCodigo = txtCodigo;
    }

    public InputText getTxtBarrio() {
        return txtBarrio;
    }

    public void setTxtBarrio(InputText txtBarrio) {
        this.txtBarrio = txtBarrio;
    }

    public InputText getTxtDireccion() {
        return txtDireccion;
    }

    public void setTxtDireccion(InputText txtDireccion) {
        this.txtDireccion = txtDireccion;
    }
    
    public InputText getTxtCliente() {
        return txtCliente;
    }

    public void setTxtCliente(InputText txtCliente) {
        this.txtCliente = txtCliente;
    }

    public SelectBooleanCheckbox getDisponibilidad() {
        return disponibilidad;
    }

    public void setDisponibilidad(SelectBooleanCheckbox disponibilidad) {
        this.disponibilidad = disponibilidad;
    }

    public CommandButton getBtnRegistrar() {
        return btnRegistrar;
    }

    public void setBtnRegistrar(CommandButton btnRegistrar) {
        this.btnRegistrar = btnRegistrar;
    }

    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    public CommandButton getBtnEliminar() {
        return btnEliminar;
    }

    public void setBtnEliminar(CommandButton btnEliminar) {
        this.btnEliminar = btnEliminar;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public void setListaClientes(List<Clientes> listaClientes) {
        this.listaClientes = listaClientes;
    }
    
    public List<Clientes> getListaClientes() {
        try {
            listaClientes = clienteLogica.consultar();
            return listaClientes;
        } catch (Exception ex) {
            Logger.getLogger(InmuebleVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        return listaClientes;
    }
    
    public List<Inmueble> getListaInmuebles() {
        
        try {
            listaInmuebles = inmuebleLogica.consultar();
            return listaInmuebles;
        } catch (Exception ex) {
            Logger.getLogger(InmuebleVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        return listaInmuebles;
    }

    public void setListaInmuebles(List<Inmueble> listaInmuebles) {
        this.listaInmuebles = listaInmuebles;
    }

    public Inmueble getSelectInmueble() {
        return selectInmueble;
    }

    public void setSelectInmueble(Inmueble selectInmueble) {
        this.selectInmueble = selectInmueble;
    }

    public TipoInmuebleLogicaLocal getTipoInmuebleLogica() {
        return tipoInmuebleLogica;
    }

    public void setTipoInmuebleLogica(TipoInmuebleLogicaLocal tipoInmuebleLogica) {
        this.tipoInmuebleLogica = tipoInmuebleLogica;
    }

    public SelectOneMenu getCmdTipoInmueble() {
        return cmdTipoInmueble;
    }

    public void setCmdTipoInmueble(SelectOneMenu cmdTipoInmueble) {
        this.cmdTipoInmueble = cmdTipoInmueble;
    }

    public ArrayList<SelectItem> getTipoInmueble() {
        if(tipoInmueble == null){
            try {
                tipoInmueble = new ArrayList();
                List<TipoInmueble> lista = tipoInmuebleLogica.consultar();
                for(int i = 0; i < lista.size(); i++) {
                    tipoInmueble.add(new SelectItem(lista.get(i).getCodigoTipo(), lista.get(i).getNombreTipo()));
                }
            } catch (Exception ex) {
                Logger.getLogger(InmuebleVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return tipoInmueble;
    }
    
    
    public void setTipoInmueble(ArrayList<SelectItem> tipoInmueble) {
        this.tipoInmueble = tipoInmueble;
    }
    
    
    public void clienteSeleccionado(SelectEvent evento){
        Clientes seleccionado = (Clientes)evento.getObject();
        txtCliente.setValue(seleccionado.getCedulaCliente());
    }
    
    public void inmuebleSeleccionado(SelectEvent evento){
        Inmueble seleccionado = (Inmueble)evento.getObject();
        txtCodigo.setValue(seleccionado.getCodigoInmueble());
        txtBarrio.setValue(seleccionado.getBarrio());
        txtCliente.setValue(seleccionado.getCedulaDueno().getCedulaCliente());
        txtDireccion.setValue(seleccionado.getDireccion());
        areaDescripcion.setValue(seleccionado.getDescripcion());
        cmdTipoInmueble.setValue(seleccionado.getCodTipoInmueble().getCodigoTipo());
        disponibilidad.setValue(seleccionado.getDisponibilidad());
        btnRegistrar.setDisabled(true);
        btnModificar.setDisabled(false);
        btnEliminar.setDisabled(false);
    }
     
    public void registrar(){
        try {
            Inmueble inmueble = new Inmueble();
            inmueble.setCodigoInmueble(Long.parseLong(txtCodigo.getValue().toString()));
            inmueble.setBarrio(txtBarrio.getValue().toString());
            inmueble.setDireccion(txtDireccion.getValue().toString());
            inmueble.setDescripcion(areaDescripcion.getValue().toString());
            
            Clientes cliente = clienteLogica.consultarPorCedula(Long.parseLong(txtCliente.getValue().toString()));
            inmueble.setCedulaDueno(cliente);
            
            TipoInmueble tipo = tipoInmuebleLogica.consultarTipoInmPorCodigo(Integer.parseInt(cmdTipoInmueble.getValue().toString()));
            inmueble.setCodTipoInmueble(tipo);
            inmueble.setDisponibilidad(disponibilidad.isSelected());
                        
            inmuebleLogica.registrar(inmueble);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage("El inmueble se creó con exito"));
            limpiar();
        } catch (Exception ex) {
            Logger.getLogger(InmuebleVista.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(ex.getMessage()));
        }
    }
    
    public void modificar(){
        try {
            Inmueble inmueble = new Inmueble();
            inmueble.setCodigoInmueble(Long.parseLong(txtCodigo.getValue().toString()));
            inmueble.setBarrio(txtBarrio.getValue().toString());
            inmueble.setDireccion(txtDireccion.getValue().toString());
            inmueble.setDescripcion(areaDescripcion.getValue().toString());
            
            Clientes cliente = clienteLogica.consultarPorCedula(Long.parseLong(txtCliente.getValue().toString()));
            inmueble.setCedulaDueno(cliente);
            
            TipoInmueble tipo = tipoInmuebleLogica.consultarTipoInmPorCodigo(Integer.parseInt(cmdTipoInmueble.getValue().toString()));
            inmueble.setCodTipoInmueble(tipo);
            inmueble.setDisponibilidad(disponibilidad.isSelected());
                        
            inmuebleLogica.modificar(inmueble);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage("El inmueble se modificó con exito"));
            limpiar();
        } catch (Exception ex) {
            Logger.getLogger(InmuebleVista.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(ex.getMessage()));
        }
    }
    
    public void eliminar(){
        try {
            Inmueble inmueble = new Inmueble();
            inmueble.setCodigoInmueble(Long.parseLong(txtCodigo.getValue().toString()));
            inmueble.setBarrio(txtBarrio.getValue().toString());
            inmueble.setDireccion(txtDireccion.getValue().toString());
            inmueble.setDescripcion(areaDescripcion.getValue().toString());
            
            Clientes cliente = clienteLogica.consultarPorCedula(Long.parseLong(txtCliente.getValue().toString()));
            inmueble.setCedulaDueno(cliente);
            
            TipoInmueble tipo = tipoInmuebleLogica.consultarTipoInmPorCodigo(Integer.parseInt(cmdTipoInmueble.getValue().toString()));
            inmueble.setCodTipoInmueble(tipo);
            inmueble.setDisponibilidad(disponibilidad.isSelected());
                        
            inmuebleLogica.eliminar(inmueble);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage("El inmueble se eliminó con exito"));
            limpiar();
        } catch (Exception ex) {
            Logger.getLogger(InmuebleVista.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(ex.getMessage()));
        }
    }
    
    public void limpiar(){
        txtCodigo.setValue("");
        txtBarrio.setValue("");
        txtDireccion.setValue("");
        txtCliente.setValue("");
        cmdTipoInmueble.setValue("");
        areaDescripcion.setValue("");
        btnRegistrar.setDisabled(false);
        btnModificar.setDisabled(true);
        btnEliminar.setDisabled(true);
    }
}
